package com.chinaisafe.user.util;

import com.chinaisafe.user.vo.response.SysMenuRespVO;

import java.util.*;

/**
 * MenuTreeBuilder
 * Description：
 *
 * @author tby
 * @date 2024/7/13 9:31
 */
public class MenuTreeBuilder {
    /**
     * 构建树形菜单
     * @param nodes 菜单列表
     * @return 树形菜单
     * @author tby
     * @date  2024/7/13 9:35
     * */
    public static List<SysMenuRespVO> buildTrees(List<SysMenuRespVO> nodes) {
        if (nodes == null || nodes.isEmpty()) {
            return Collections.emptyList();
        }

        // 创建一个Map来保存每个id对应的节点
        Map<Long, SysMenuRespVO> idNodeMap = new HashMap<>(nodes.size());
        for (SysMenuRespVO node : nodes) {
            idNodeMap.put(node.getId(), node);
        }

        // 存储所有根节点的列表
        List<SysMenuRespVO> rootNodes = new ArrayList<>();
        for (SysMenuRespVO node : nodes) {
            // 如果parentId是null或者Map中没有对应的节点（表示没有父节点）
            if (node.getParentId() == null || !idNodeMap.containsKey(node.getParentId())) {
                rootNodes.add(node);
            } else {
                // 否则，找到父节点并添加到子节点列表中
                SysMenuRespVO parent = idNodeMap.get(node.getParentId());
                if (parent.getChildren() == null) {
                    parent.setChildren(new ArrayList<>());
                }
                parent.getChildren().add(node);
            }
        }
        return rootNodes;
    }
}
